//函数扩展  es6语法
//  参数默认值  rest参数   扩展运算符(rest参数逆应用)
//  箭头函数    this绑定   尾调用

{
  function test(x, y = 'world'){
    console.log('默认值',x,y);
  }
  test('hello');
  test('hello','kill');
}

{
  let x='test';
  function test2(x,y=x){       //函数内部是独立的作用域~！和外界无关~！
    console.log('作用域',x,y);
  }
  test2('kill');
}

{ //rest参数
  function test3(...arg){
    for(let v of arg){
      console.log('rest',v);
    }
  }
  test3(1,2,3,4,'a');
}

{//扩展运算符
  console.log(...[1,2,4]);
  console.log('a',...[1,2,4]);
}

{   //函数名   参数  返回值
  let arrow = v => v*2;            //有参数
  let arrow2 = () => 5;            //无参数
  console.log('arrow',arrow(3));
  console.log(arrow2());

}

{ // 尾调用  --函数式编程  提升性能~！
  function tail(x){
    console.log('tail',x);
  }
  function fx(x){
    return tail(x)        //最后一步，是一个函数调用~！
  }
  fx(123)
}
